博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django 学习笔记 (三)
阅读量:7255 次
发布时间:2019-06-29

本文共 4155 字,大约阅读时间需要 13 分钟。

hot3.png

三、Writing your first Django app, part 3

写第一个视图

  1. 建立 polls/views.py

    # encoding: utf-8 from django.http import HttpResponse def index(request):     return HttpResponse("Hello, world. You're at the poll index.")
  2. 建立 polls/urls.py

    # -*- coding: UTF-8 -*- from django.conf.urls import patterns, url from polls import views urlpatterns = patterns('',     url(r'^$', views.index, name='index') )
  3. 在根 urls.py 中 include 新的urls.py

    urlpatterns = patterns('',     url(r'^polls/', include('polls.urls')),     url(r'^admin/', include(admin.site.urls)), )

url() 函数的四个参数

  1. 正则表达式 regex

    • 从上往下顺序查找
    • 不匹配 GET POST 参数
    • 不匹配域名
  2. 视图参数 view

    • HttpRequest 对象作为第一个参数

    • 使用正则表达式捕捉的其他参数

      1. 普通捕捉:位置参数
      2. 命名捕捉:命名参数
  3. 可以给视图 view 传递任意参数 kwargs

  4. urls 的名称 name

    在模版中明确地使用该 urls

再写一个视图

  1. 在 polls/views.py 中增加几个带参数的函数定义

    def detail(request, poll_id):     return HttpResponse("You're looking at poll %s." % poll_id) def results(request, poll_id):     return HttpResponse("You're looking at the results of poll %s." % poll_id) def vote(request, poll_id):     return HttpResponse("You're voting on poll %s." % poll_id)
  2. 增加 urls

    演示了参数传递的效果

    from django.conf.urls import patterns, url from polls import views urlpatterns = patterns('',     # ex: /polls/     url(r'^$', views.index, name='index'),     # ex: /polls/5/     url(r'^(?P
    \d+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P
    \d+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P
    \d+)/vote/$', views.vote, name='vote'), )

写一个实际功能的视图

每个视图会返回一个结果:

  • HttpResponse 对象
  • Http404

可以直接写在view里面,但是硬编码不好,所以还是使用模版的方式更符合MVC的习惯。

  1. 建立路径 polls/templates

  2. 建立 polls/templates/polls/index.html

    {% if latest_poll_list %}     
    {% else %}

    No polls are available.

    {% endif %}
  3. 修改 polls/views.py , 使用index.html模版

    from django.http import HttpResponse from django.template import RequestContext, loader from polls.models import Poll def index(request):     latest_poll_list = Poll.objects.order_by('-pub_date')[:5]     template = loader.get_template('polls/index.html')     context = RequestContext(request, {         'latest_poll_list': latest_poll_list,     })     return HttpResponse(template.render(context))
  4. 使用快捷方式 render() 来减少编码

    from django.shortcuts import render from polls.models import Poll def index(request):     latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]     context = {'latest_poll_list': latest_poll_list}     return render(request, 'polls/index.html', context)

快捷方式 render()

  • 参数

    1. request
    2. 模版文件
    3. context
  • 返回

    1. HttpResponse 对象

      from django.shortcuts import render from polls.models import Poll def index(request):     latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]     context = {'latest_poll_list': latest_poll_list}     return render(request, 'polls/index.html', context)

引发一个404异常

  1. 导入 Http404 from django.http import Http404

  2. 抛出异常 raise Http404

    from django.http import Http404 # ... def detail(request, poll_id):     try:         poll = Poll.objects.get(pk=poll_id)     except Poll.DoesNotExist:         raise Http404     return render(request, 'polls/detail.html', {'poll': poll})
  3. 通过使用 快捷方式 get_object_or_404() 来减少代码

    from django.shortcuts import render, get_object_or_404 # ... def detail(request, poll_id):     poll = get_object_or_404(Poll, pk=poll_id)     return render(request, 'polls/detail.html', {'poll': poll})
  4. 自己写一个 404 页面

    • 模版根目录下建立一个 404.html

    • 通过在根的 urls.py 中设置handler404 变量指定自定义视图

      # 例子  # polls/views.py中增加一个函数      def no_page(request):          return HttpResponse("Can't found poll ." )  # 根 urls.py 中增加      from polls import views      handler404 = views.no_page

    注意:

    1. DEBUG 必须是False ,否则无效果
    2. 本地开发要设置允许本地访问 ALLOWED_HOSTS = ['localhost',]

使用模版系统

模版的搜索顺序

  1. 对象
  2. 属性
  3. 列表循环

循环

{% for choice in poll.choice_set.all %}        
  • {
    { choice.choice_text }}
  • {% endfor %}

    移除模版当中的硬编码

            改写为    

    为了避免不同应用之间的命名冲突,可以使用namespace参数.

    1. 在根 urls.py 中, url(r'^polls/', include('polls.urls', namespace="polls")),
    2. 模版中 <a href="{% url 'polls:detail' poll.id %}">

    转载于:https://my.oschina.net/bailiangcn/blog/225289

    你可能感兴趣的文章
    使用Excel消费C4C的OData service
    查看>>
    BOM基本概念
    查看>>
    QuickBI助你成为分析师-数据建模(二)
    查看>>
    JSON Web Token 简介
    查看>>
    小谈yii2中3个数据提供者及与GridView的搭配使用
    查看>>
    对于iOS性能优化的一点看法
    查看>>
    移动端字体大小调节器实现
    查看>>
    在开始第一个机器学习项目之前就了解的那些事儿
    查看>>
    运行eos节点之官网从节点
    查看>>
    数据可视化,个人经验总结(Echarts相关)
    查看>>
    ajax简单封装
    查看>>
    【360天】跃迁之路——程序员高效学习方法论探索系列(实验阶段118-2018.01.31)...
    查看>>
    扯点:FC - Formatting Context
    查看>>
    WebGL2系列之顶点数组对象
    查看>>
    [webpack3.8.1]Guides-3-Asset Management(资源管理)
    查看>>
    Linux下libevent库的基础安装和安装错误的解决方案以及使用
    查看>>
    Makefile 速查笔记
    查看>>
    Go基础学习二之常用命令、包、变量、常量、控制语句、range
    查看>>
    【前端自动化测试】Karma + Jasmine + RequireJS 的自动化测试实现
    查看>>
    Webpack + Vue2 + Koa2 构建应用
    查看>>